/////precompiled////////
#include "precompiled.h"
////////////////////////


#include "prs_FrmValue.h"
using namespace prs;

// TFrmValue //////////////////////////////////////////////////////////////////

// TFrmStringValue ////////////////////////////////////////////////////////////

//
void TFrmStringValue::TFrmValue_SetValueIntoAttr(TAttr *Attr)
{
  TAttrStringBase *PAttr = dynamic_cast<TAttrStringBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueIntoAttr[!PAttr]");
  }

  if (Null.GetValue()) {
    PAttr->SetValue("");
  }
  else {
    PAttr->SetValue(Value.GetValue());
  }
}

//
void TFrmStringValue::TFrmValue_SetValueFromAttr(TAttr *Attr)
{
  TAttrStringBase *PAttr = dynamic_cast<TAttrStringBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueFromAttr[!PAttr]");
  }

  Value.SetValue(PAttr->GetValue());
}

// TFrmBoolValue //////////////////////////////////////////////////////////////

//
void TFrmBoolValue::TFrmValue_SetValueIntoAttr(TAttr *Attr)
{
  TAttrBoolBase *PAttr = dynamic_cast<TAttrBoolBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueIntoAttr[!PAttr]");
  }

  if (Null.GetValue()) {
    PAttr->SetValue(false);
  }
  else {
    PAttr->SetValue(Value.GetValue());
  }
}

//
void TFrmBoolValue::TFrmValue_SetValueFromAttr(TAttr *Attr)
{
  TAttrBoolBase *PAttr = dynamic_cast<TAttrBoolBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueFromAttr[!PAttr]");
  }

  Value.SetValue(PAttr->GetValue());
}

// TFrmIntegerValue ///////////////////////////////////////////////////////////

//
void TFrmIntegerValue::TFrmValue_SetValueIntoAttr(TAttr *Attr)
{
  TAttrIntegerBase *PAttr = dynamic_cast<TAttrIntegerBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueIntoAttr[!PAttr]");
  }

  if (Null.GetValue()) {
    PAttr->SetValue(0);
  }
  else {
    PAttr->SetValue(Value.GetValue());
  }
}

//
void TFrmIntegerValue::TFrmValue_SetValueFromAttr(TAttr *Attr)
{
  TAttrIntegerBase *PAttr = dynamic_cast<TAttrIntegerBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueFromAttr[!PAttr]");
  }

  Value.SetValue(PAttr->GetValue());
}

// TFrmDoubleValue ////////////////////////////////////////////////////////////

//
void TFrmDoubleValue::TFrmValue_SetValueIntoAttr(TAttr *Attr)
{
  TAttrDoubleBase *PAttr = dynamic_cast<TAttrDoubleBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueIntoAttr[!PAttr]");
  }

  if (Null.GetValue()) {
    PAttr->SetValue(0);
  }
  else {
    PAttr->SetValue(Value.GetValue());
  }
}

//
void TFrmDoubleValue::TFrmValue_SetValueFromAttr(TAttr *Attr)
{
  TAttrDoubleBase *PAttr = dynamic_cast<TAttrDoubleBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueFromAttr[!PAttr]");
  }

  Value.SetValue(PAttr->GetValue());
}

// TFrmDateTimeValue //////////////////////////////////////////////////////////

//
void TFrmDateTimeValue::TFrmValue_SetValueIntoAttr(TAttr *Attr)
{
  TAttrDateTimeBase *PAttr = dynamic_cast<TAttrDateTimeBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueIntoAttr[!PAttr]");
  }

  if (Null.GetValue()) {
    PAttr->SetValue(0);
  }
  else {
    PAttr->SetValue(Value.GetValue());
  }
}

//
void TFrmDateTimeValue::TFrmValue_SetValueFromAttr(TAttr *Attr)
{
  TAttrDateTimeBase *PAttr = dynamic_cast<TAttrDateTimeBase*>(Attr);
  if (!PAttr) {
    Except("TFrmValue_SetValueFromAttr[!PAttr]");
  }

  Value.SetValue(PAttr->GetValue());
}

// TFrmControlsValue //////////////////////////////////////////////////////////

//
TFrmControlsValue *TFrmControlsValue::SearchByIdInDefTemplate(
  TNode *FromChild,
  char *Id
)
{
  TNode *P = TNodeSearch(FromChild)
  .SearchNearParentByType(nodeType_DefTemplate)
   .SearchChildren()
    .SearchByType(nodeType_TFrmControlsValue,true)
     .SearchById(Id)
      .GetFirst();

  return dynamic_cast<TFrmControlsValue*>(P);
}

